package is202.hrms.entity;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQuery;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

/** Entitets-klasse som er koblet til en database-tabell.
 * Navnet på tabellen vil bli det samme som navnet på klassen, så objekter av Modul vil
 * bli lagret i tabellen MODUL.
 * @author Vetle
 */
@Entity
public class Modul implements Serializable {

    private static final long serialVersionUID = 1L;

    /** @Id gjør id til en primærnøkkel.
     * @GeneratedValue gjør at verdier på primærnøkkelen blir automatisk generert
     */
    @Id @GeneratedValue
    private long id;

    /** @NotNull gjør at attributtet "navn" må inneholde en verdi. (constraint)
     * Det samme gjelder annotasjonen @Size(min=1) som sier at lengden på verdien
     * som blir skrevet inn er på minst ett tegn (bokstav/tall osv)
     */
    @NotNull @Size(min=1)
    private String navn;

    /** @ManyToOne gjør at student har et mange-til-en-forhold. 
     */
    @ManyToOne
    private Student student;

    public Modul() {
    }

    /** Getters & setters
     */
    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getNavn() {
        return navn;
    }

    public void setNavn(String navn) {
        this.navn = navn;
    }

    public Student getStudent() {
        return student;
    }

    public void setStudent (Student student) {
System.out.println("Setting student of "+ this + " to " + student);
        this.student = student;
    }

    /** @Override sier at både hashCode() og equals() må overstyres og være konsistente.
     * Hvis a.equals(b) må også a.hashCode() == b.hashCode() være sann
     */
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + (int) (id ^ (id >>> 32));
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (obj == null) return false;
        if (getClass() != obj.getClass()) return false;
        Modul other = (Modul) obj;
        if (id != other.id) return false;
        return true;
    }

    public String toString() {
        return "["+id+" "+navn+"]";
    }
}
